原本DynamoDB的儲存方式為最後者獲勝,但是AWS SDK提供了一種用版本編號的樂觀鎖定方式,說穿了就是使用之前提到的條件式儲存配合一個版本編號屬性,來達成的功能。所以這不是DynamoDB本身的儲存機制,而是AWS SDK提供的實作方法。
樂觀鎖定的核心概念是,以一個版本屬性紀錄目前項目的版本編號。當程式作業儲存項目時,必須提供該項目之前讀取到的版本編號,只有版本編號一致時才進行儲存;也就代表了從之前讀取項目到儲存項目為止,該項目並沒有被異動過。而後儲存成功時,版本編號自動增加。
新增一個儲存版本編號的屬性,需要nullable類型,如Integer、Long
因為request/response都需要使用,所以設定為Public
@DynamoDBVersionAttribute
@JsonView({ Views.Public.class });
private Long version;
因為request時,version沒有以views作為區分新增或更新要求,另一個偷懶的方式是在save判斷id為空而為新增項目時,將version設為null
person.setVersion(null);
原則上以上兩個小修改就能實作樂觀鎖定了
使用樂觀鎖定時要注意兩點